Video systems utilize video applications, which may be described as components in software that manipulate video, particularly video acquired from a camera. Video applications require large amounts of memory. Video applications manipulate one or more frames of video, often in a way that requires the entire frame or frames to be in memory all at once. Examples include: sending video out via TCP, sending video out via UDP, rendering video on a local display, transcoding to a different video type such as a series of raw images to JPEGs, motion detection, etc. The individual frames may be quite large, so running multiple video applications simultaneously, each holding multiple video frames, results in very high memory usage.
Video applications work with the embedded system to manipulate or utilize information provided from video sources such as cameras. Video applications are best designed to be encapsulated from the details of the video source. This allows for the optimal reusability and extensibility of the video application and the video source software (i.e. the camera driver).
The embedded systems often have a small amount of memory especially when compared to modern PCs. It is a challenge to provide an optimal amount of PC-like features in an embedded device with much less memory than a PC has. For embedded systems there is a wide spectrum of available horsepower and costs for processor speed and the size of available memory. Generally, as cost decreases, horsepower and the available memory decreases. As available memory decreases, supporting video becomes more of a challenge because of the memory requirements of video.